11115. Красивое число

 

Вам дано два множества, состоящих из ненулевых цифр.

В десятичной записи мы называем целое положительное число красивым, если оно содержит хотя бы одну цифру из каждого этих наборов.

Найдите наименьшее красивое число.

 

Вход. В первой строке даётся два целых числа n и m (1 ≤ nm ≤ 9) – размеры первого и второго множества. Во второй строке даётся n различных цифр d1d2, ..., dn. В третьей строке даётся m различных цифр r1, r2, ..., rm (1 di, ri 9).

 

Выход. Выведите наименьшее красивое число.

 

Пример входа

Пример выхода

2 2

1 4

8 3

13

 

 

РЕШЕНИЕ

жадность

 

Анализ алгоритма

Если массивы d и r содержат одну и ту же цифру, то наименьшая из таких цифр будет ответом.

Иначе сортируем массивы d и r. Находим наименьшие цифры d[0] и r[0]. Составляем из них минимальное двузначное число. Это будет или d[0] * 10 + r[0] или r[0] * 10 + d[0].

 

Пример

Пусть d = {1, 3, 5, 7, 9}, r = {2, 3, 4, 5, 8, 9}. Наименьшей общей цифрой будет 3. Следовательно ответом будет число 3.

Пусть d = {1, 3, 5, 7, 9}, r = {2, 4, 6, 8}. Общих цифр нет. Наименьшими цифрами в массивах будут 1 и 2. Составляем из них наименьшее число 12, которое и будет ответом.

 

Реализация алгоритма

Объявим рабочие массивы.

 

vector<int> d, r;

int dc[10], rc[10];

 

Читаем входные данные.

 

scanf("%d %d", &n, &m);

 

Произведем сортировку подсчетом. Занесем в dc[x] количество раз, которое число x встречается в массиве d.

 

d.resize(n);

for (i = 0; i < n; i++)

{

  scanf("%d", &d[i]);

  dc[d[i]]++;

}

 

Занесем в rc[x] количество раз, которое число x встречается в массиве r.

 

r.resize(m);

for (i = 0; i < m; i++)

{

  scanf("%d", &r[i]);

  rc[r[i]]++;

}

 

Переберем цифры от 1 до 9. Если цифра i присутствует в обеих массивах, то выводим ответ – число i.

 

for (i = 1; i <= 9; i++)

  if (dc[i] > 0 && rc[i] > 0)

  {

    printf("%d\n", i);

    return 0;

  }

 

Сортируем массивы.

 

sort(d.begin(), d.end());

sort(r.begin(), r.end());

 

Из наименьших цифр массивов d[0] и r[0] составляем минимальное двузначное число.

 

if (d[0] < r[0])

  res = 10 * d[0] + r[0];

else

  res = 10 * r[0] + d[0];

 

Выводим ответ.

 

printf("%d\n", res);